
package com.casa_apoio.model.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.UniqueConstraint;
import org.hibernate.annotations.ForeignKey;

@Entity
public class Acesso implements Serializable{
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer idAcesso;
    @Column(length = 10)
    private String login;
    @Column(length = 50)
    private String senha;    
    
    @ElementCollection(targetClass = String.class)
    @JoinTable(name = "acesso_permissao", uniqueConstraints = {@UniqueConstraint(columnNames = {"acesso","permissao"})},
            joinColumns = @JoinColumn(name = "acesso"))
    @Column(name = "permissao", length = 50)
    private Set<String> permissao = new HashSet<String>();
    
    @ManyToOne(optional = true, fetch = FetchType.LAZY)
    @ForeignKey(name = "acessoFuncionario")
    @JoinColumn(name = "idFuncionario", referencedColumnName = "idFuncionario")
    private Funcionario funcionario;
    private boolean ativo;

    public Acesso() {
    funcionario = new Funcionario();
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 13 * hash + (this.idAcesso != null ? this.idAcesso.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Acesso other = (Acesso) obj;
        if (this.idAcesso != other.idAcesso && (this.idAcesso == null || !this.idAcesso.equals(other.idAcesso))) {
            return false;
        }
        return true;
    }

    public Integer getIdAcesso() {
        return idAcesso;
    }

    public void setIdAcesso(Integer idAcesso) {
        this.idAcesso = idAcesso;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public Set<String> getPermissao() {
        return permissao;
    }

    public void setPermissao(Set<String> permissao) {
        this.permissao = permissao;
    }

    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    public boolean isAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }
}
